#include "../include/header.h"

/*
书写一个程序同时监听管道的读端和写端。
如果可写，则写入4096个字节
如果可读，则读取1024个字节
描述一下运行的现象
*/
int main(int argc, char* argv[]){
	ARGS_CHECK(argc, 1);
	int fd1 = open("pipe", O_RDWR);
	ERROR_CHECK(fd1, -1, "open");
	int fd2 = open("pipe", O_RDONLY);
	ERROR_CHECK(fd2, -1, "open");

    fd_set set;
    FD_ZERO(&set);	
	
	int cnt = 0;
	while(1){
		FD_SET(fd1, &set);
        FD_SET(fd2, &set);
		struct timeval tv = {1, 0};
        int ret = select(20, &set, NULL, NULL, &tv);
		ERROR_CHECK(ret, -1, "select");
		//printf("ret = %d\n", ret);

		/**
		 * 第一次ret返回0，只能写
		 * 若读完，只能写（不可能，写的比读的快）
		*/
		if(ret == 0){
			char buf[4096];
			memset(buf, 'c', sizeof buf);
			write(fd1, buf, sizeof buf);
		}


		// read
		// case1：写满，只读
		// case2：读完，只能写（不可能）
		// case3：可读可写，此时只读
		if(ret != 0){
			char buf[1024];
			bzero(buf, sizeof buf);

			int ret = read(fd2, buf, sizeof buf);
			ERROR_CHECK(ret, -1, "read err");

			printf("%s%d\n", buf, cnt++);
		}
		
	}

	close(fd1);
	close(fd2);
	return 0;
}